{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 4. Linear Models for Classification"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "from prml.features import PolynomialFeatures\n",
    "from prml.linear import (\n",
    "    BayesianLogisticRegressor,\n",
    "    LeastSquaresClassifier,\n",
    "    LinearDiscriminantAnalyzer,\n",
    "    LogisticRegressor,\n",
    "    Perceptron,\n",
    "    SoftmaxRegressor\n",
    ")\n",
    "\n",
    "np.random.seed(1234)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def create_toy_data(add_outliers=False, add_class=False):\n",
    "    x0 = np.random.normal(size=50).reshape(-1, 2) - 1\n",
    "    x1 = np.random.normal(size=50).reshape(-1, 2) + 1.\n",
    "    if add_outliers:\n",
    "        x_1 = np.random.normal(size=10).reshape(-1, 2) + np.array([5., 10.])\n",
    "        return np.concatenate([x0, x1, x_1]), np.concatenate([np.zeros(25), np.ones(30)]).astype(np.int)\n",
    "    if add_class:\n",
    "        x2 = np.random.normal(size=50).reshape(-1, 2) + 3.\n",
    "        return np.concatenate([x0, x1, x2]), np.concatenate([np.zeros(25), np.ones(25), 2 + np.zeros(25)]).astype(np.int)\n",
    "    return np.concatenate([x0, x1]), np.concatenate([np.zeros(25), np.ones(25)]).astype(np.int)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4.1 Discriminant Functions"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.1.3 Least squares for classification"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nFaN4ls0AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x113ebf400>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_train, y_train = create_toy_data()\n",
    "x1_test, x2_test = np.meshgrid(np.linspace(-5, 5, 100), np.linspace(-5, 5, 100))\n",
    "x_test = np.array([x1_test, x2_test]).reshape(2, -1).T\n",
    "\n",
    "feature = PolynomialFeatures(1)\n",
    "X_train = feature.transform(x_train)\n",
    "X_test = feature.transform(x_test)\n",
    "\n",
    "model = LeastSquaresClassifier()\n",
    "model.fit(X_train, y_train)\n",
    "y = model.classify(X_test)\n",
    "\n",
    "plt.scatter(x_train[:, 0], x_train[:, 1], c=y_train)\n",
    "plt.contourf(x1_test, x2_test, y.reshape(100, 100), alpha=0.2, levels=np.linspace(0, 1, 3))\n",
    "plt.xlim(-5, 5)\n",
    "plt.ylim(-5, 5)\n",
    "plt.gca().set_aspect('equal', adjustable='box')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10d8963c8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_train, y_train = create_toy_data(add_outliers=True)\n",
    "x1_test, x2_test = np.meshgrid(np.linspace(-5, 15, 100), np.linspace(-5, 15, 100))\n",
    "x_test = np.array([x1_test, x2_test]).reshape(2, -1).T\n",
    "\n",
    "feature = PolynomialFeatures(1)\n",
    "X_train = feature.transform(x_train)\n",
    "X_test = feature.transform(x_test)\n",
    "\n",
    "least_squares = LeastSquaresClassifier()\n",
    "least_squares.fit(X_train, y_train)\n",
    "y_ls = least_squares.classify(X_test)\n",
    "\n",
    "logistic_regressor = LogisticRegressor()\n",
    "logistic_regressor.fit(X_train, y_train)\n",
    "y_lr = logistic_regressor.classify(X_test)\n",
    "\n",
    "plt.subplot(1, 2, 1)\n",
    "plt.scatter(x_train[:, 0], x_train[:, 1], c=y_train)\n",
    "plt.contourf(x1_test, x2_test, y_ls.reshape(100, 100), alpha=0.2, levels=np.linspace(0, 1, 3))\n",
    "plt.xlim(-5, 15)\n",
    "plt.ylim(-5, 15)\n",
    "plt.gca().set_aspect('equal', adjustable='box')\n",
    "plt.title(\"Least Squares\")\n",
    "plt.subplot(1, 2, 2)\n",
    "plt.scatter(x_train[:, 0], x_train[:, 1], c=y_train)\n",
    "plt.contourf(x1_test, x2_test, y_lr.reshape(100, 100), alpha=0.2, levels=np.linspace(0, 1, 3))\n",
    "plt.xlim(-5, 15)\n",
    "plt.ylim(-5, 15)\n",
    "plt.gca().set_aspect('equal', adjustable='box')\n",
    "plt.title(\"Logistic Regression\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x113ebf390>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_train, y_train = create_toy_data(add_class=True)\n",
    "x1_test, x2_test = np.meshgrid(np.linspace(-5, 10, 100), np.linspace(-5, 10, 100))\n",
    "x_test = np.array([x1_test, x2_test]).reshape(2, -1).T\n",
    "\n",
    "feature = PolynomialFeatures(1)\n",
    "X_train = feature.transform(x_train)\n",
    "X_test = feature.transform(x_test)\n",
    "\n",
    "least_squares = LeastSquaresClassifier()\n",
    "least_squares.fit(X_train, y_train)\n",
    "y_ls = least_squares.classify(X_test)\n",
    "\n",
    "logistic_regressor = SoftmaxRegressor()\n",
    "logistic_regressor.fit(X_train, y_train, max_iter=1000, learning_rate=0.01)\n",
    "y_lr = logistic_regressor.classify(X_test)\n",
    "\n",
    "plt.subplot(1, 2, 1)\n",
    "plt.scatter(x_train[:, 0], x_train[:, 1], c=y_train)\n",
    "plt.contourf(x1_test, x2_test, y_ls.reshape(100, 100), alpha=0.2, levels=np.array([0., 0.5, 1.5, 2.]))\n",
    "plt.xlim(-5, 10)\n",
    "plt.ylim(-5, 10)\n",
    "plt.gca().set_aspect('equal', adjustable='box')\n",
    "plt.title(\"Least squares\")\n",
    "plt.subplot(1, 2, 2)\n",
    "plt.scatter(x_train[:, 0], x_train[:, 1], c=y_train)\n",
    "plt.contourf(x1_test, x2_test, y_lr.reshape(100, 100), alpha=0.2, levels=np.array([0., 0.5, 1.5, 2.]))\n",
    "plt.xlim(-5, 10)\n",
    "plt.ylim(-5, 10)\n",
    "plt.gca().set_aspect('equal', adjustable='box')\n",
    "plt.title(\"Softmax Regression\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.1.4 Fisher's linear discriminant"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x113ec3470>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_train, y_train = create_toy_data()\n",
    "x1_test, x2_test = np.meshgrid(np.linspace(-5, 5, 100), np.linspace(-5, 5, 100))\n",
    "x_test = np.array([x1_test, x2_test]).reshape(2, -1).T\n",
    "\n",
    "model = LinearDiscriminantAnalyzer()\n",
    "model.fit(x_train, y_train)\n",
    "y = model.classify(x_test)\n",
    "\n",
    "plt.scatter(x_train[:, 0], x_train[:, 1], c=y_train)\n",
    "plt.contourf(x1_test, x2_test, y.reshape(100, 100), alpha=0.2, levels=np.linspace(0, 1, 3))\n",
    "plt.xlim(-5, 5)\n",
    "plt.ylim(-5, 5)\n",
    "plt.gca().set_aspect('equal', adjustable='box')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4.3 Probabilistic Discriminative Models"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.3.2 Logistic Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nAlsnPH//DEKBpr2rUCDEiw+80qVhafngMkYfMgpPQdOOs9fn5aQLjwVgx+YqFr2xpMXQM5k1i9cS\nTbK9Xk9JtiLBmEywwNYJ2zfuSHq8rrqOSDh5vbP2XPLr89jvyH3wFHjwFRZQVFbEBTd/k1EH7g7A\n5rXb8Hg79sQgGon1+FKtBpZIMNnEnrF1woAR/dm4clOL46XlxXiSrTDogMJiP5ffdQG11fXUVddR\nPqRfY/VagIG7VyTd1T2ZSDhC9dZqhlbuKlG0ftlG1i5dT/mQfuw1rhKXK73TQdZ1cZG8Malkga0T\nvvqDU3nw+scJJTzsL/B7OevKU7o9f6yotJCi0pble8oGlHLwCQew8PXFTe6bjEZj3H/t3xi252Au\nu/tCHr/tXyybs9Jpmwil/Yv50bQrKBuQbI+BrqneVsNHby4lGo1x4DFj2OaKJp3bZokE05NsKNoJ\n+08cw6W/OY8howbh9rqpGN6f8276Bkec2d3tFNt24S3f5ITzjqZPSSFut4tRY/dg/OmH4PF58Pp2\n/W2KxZRQIMTaTzcw9YppLPtwJaFAmGB9iGBdkG2ff8mjN/9fytr1/ovz+PlZv+Gfdz/PM79/gV98\n9bese/WTJufYkNRkgvXYOmn/iWPYf+KYHr2n2+PmrO+fzFnfb7q5yVevPo1fn/cHqoI1TY5Hw1E2\nJWQpG8SiMVYsWE1dTT19SrpX3LFqaw3/uP2ZFlNV/n3PdM7bbzCArUgwGWM9tiy2bM4qHvrpP7j3\n6od557k5RJpNDSntX0Is1rksqAhdTnQkWjh7MckG37FojO0frGl8bYkEkwkW2LLUyw+/xp+u+Stz\nZy7k43c+5Z93/oepVzzQYrep/Y4cg8vd8p/RX+RLuutUxbAKSsuLu92+aCSGJtnQWFUb22grEkym\nWGDLQtXbanjpoVcJJSy1CtaH2LDsc+a90nSi7pn/M5mi0sLGZ21ut5sCfwEX3fptygb2bazi4fV5\n8BX5uOjWb6WkjQccnXw47vG4Oej4/Runf3Sn2q4xXWXP2LLQ8vlrcHncEGw69AzWh1g4ewmHnbJr\nV6d+g/py8z+v482n32X5vFUM2n0gx337SAbtPoB9JuzFnJcXsGLBagbvPoAJZ46jb0VqClxWDCvn\n9Msn8+JfZhGLr5v1eD0cf85RDBs9BOjctn3GpJIFtixUWOxP+vzK5XZRXNanxfGisj6ceskkTr1k\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10c3ae0f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_train, y_train = create_toy_data()\n",
    "x1_test, x2_test = np.meshgrid(np.linspace(-5, 5, 100), np.linspace(-5, 5, 100))\n",
    "x_test = np.array([x1_test, x2_test]).reshape(2, -1).T\n",
    "\n",
    "feature = PolynomialFeatures(degree=1)\n",
    "X_train = feature.transform(x_train)\n",
    "X_test = feature.transform(x_test)\n",
    "\n",
    "model = LogisticRegressor()\n",
    "model.fit(X_train, y_train)\n",
    "y = model.proba(X_test)\n",
    "\n",
    "plt.scatter(x_train[:, 0], x_train[:, 1], c=y_train)\n",
    "plt.contourf(x1_test, x2_test, y.reshape(100, 100), np.linspace(0, 1, 5), alpha=0.2)\n",
    "plt.colorbar()\n",
    "plt.xlim(-5, 5)\n",
    "plt.ylim(-5, 5)\n",
    "plt.gca().set_aspect('equal', adjustable='box')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.3.4 Multiclass logistic regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false,
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQgAAAD8CAYAAACLgjpEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXeYW9WZ/z+vykjT7XEvGBs82BiDjbHBoYMpxhBICGEh\nZGkpm/wCm0JCQtruQhLCkpCQkLJAEkpYEmJgAQfTTLENxrj33sfY4z5d5eqe3x9XM54izUijOyON\n5/08j56Rbjn3SJr71TnveYsYY1AURUmEJ9sdUBQld1GBUBQlKSoQiqIkRQVCUZSkqEAoipIUFQhF\nUZKSskCIyJ9FZJ+IrG62rUxE3hSRTfG/fbumm4qiZIN0RhBPANNbbfseMMcYUw7Mib9WFOUYQdJx\nlBKRkcAsY8z4+OsNwIXGmD0iMgR41xgzpis6qihK9+PL8PxBxpg98ed7gUHJDhSRLwNfBsgvKDhj\nVPnoDC/tHrYJE/Rl+lEoSu6wfOmaA8aYAZm249pdYYwxIpJ0OGKMeRR4FOCUiRPM3954w61LZ0wo\ntonRZWXZ7oaiuEZZ8JQdbrST6SpGZXxqQfzvvsy7pChKrpCpQLwM3BJ/fgvwUobtZY3Nhw5luwuK\nknOks8z5LLAAGCMiFSLyBeDnwKUisgm4JP66xxH0lgMqEorSmpRtEMaYG5PsmuZSX7JK0FtOKLYp\n291QlJxCPSkVRUmKCkQrdJqhKEdRgWiG2iIUpSUqEK1QkVCUo6hAJEBFQlEcVCCS0CgSitKbUYFQ\nFCUpKhAdoNMMpTejAtEOaotQejsqEB2gtgilN6MCoShKUlQgFEVJigpECgS95WqHUHolKhApoiKh\n9EZUINJARULpbahApImKhNKbUIHoBCoSSm9BBUJRlKSoQCiKkhQViAzQaYZyrOOKQIjIN0VkjYis\nFpFnRSToRru5jMZpKL2BjAVCRIYB/w5Mjtfs9AI3ZNpuT0BFQjnWcWuK4QPyRcQHFAAfu9RuzqMi\noRzLZCwQxpjdwC+AncAeoMoY06bwpoh8WUQWi8jiwwePrZtJIz6VYxU3phh9gWuAUcBQoFBEPt/6\nOGPMo8aYycaYyX37aaFcRekJuDHFuATYZozZb4yJAi8AZ7vQbo9DpxnKsYYbArETmCoiBSIiOKX4\n1rnQbo9CbRHKsYgbNoiFwExgKbAq3uajmbbbE1FbhHKskXLx3vYwxvwH8B9utKUoSu6gnpRdgE4z\nlGMFFQiXUVuEciyhAtEFqEgoxwoqEF2EioRyLKAC0YWoSCg9HRWILkaXPpWejAqEoihJUYHoJnSa\nofREVCC6AbVFKD0VFYhuQm0RSk9EBUJRlKSoQCiKkhQViG5EC+4oPQ0ViG5GRULpSahAZAEVCaWn\noAKRJVQklJ6ACoSiKElRgVAUJSkqEFlGpxlKLqMCkUXUBVvJddwq3ttHRGaKyHoRWScin3Cj3d6A\nioSSy7g1gngYeM0YMxaYQC+si5EJGqeh5CoZp70XkVLgfOBWAGNMBIhk2q6iKNnHjRHEKGA/8BcR\nWSYij4tIYeuDjuXivW6h0wwl13BDIHzAJOAPxpjTgTrge60P0uK97aO2CCUXcUMgKoCKeAk+cMrw\nTXKh3V6HioSSa7hRm3MvsEtExsQ3TQPWZtpub0VFQsklXKnNCdwJPCMiecBW4DaX2u2VBL3lhGKb\nst0NRXGteO9yYLIbbSmKkjuoJ2UOo9MMJduoQOQoaotQcgEViBxGRULJNioQOY6KhJJNVCB6ABqr\noWQLFQhFUZKiAtGD0GmG0t2oQPQQMrFFGGMw0bWY+pmY0JsYu97t7inHKG55UirdQKOH5eZDhxhd\nllrAmzEWVN8P1jowYSAP5AlMyX8ifrVtKO2jI4geRtoGy9AcsNaCCQEGCINpgJr/xhjTFV1sFxNe\ngDl8J+bgjZgjd2Miq7q9D0rq6AjiWCc8Jz5yaIWpg9gu8I04uslEIPQ6hOeDBCE4HfKmIiKudMWE\n3obaR2nKJ2RthuqfYkp+iOSNd+UairuoQPRaTPwRf2WiUHUPWLs5egNvhMA6KLo986sZA/VP0zbZ\nWMTZnvdAxtdQ3EenGD2QtKpyBS4GCbTdLkXgPTp6IPwBWB/T4gY2YQjNwtT9I6XpiLEbMNGNmNj+\nBDtDYNcmPjG2s8O2leygI4geiiMSmzo2VgYvgchHYK13blIJAB4ovhtiezChV8HeD/YBIMFUBKDh\nHyAeKPhM0suY+plQPxPEC8bC+E+G4rsRT4FzgASch0mwguIZkNJ7VrofFYgeTCoiIeLDlPzIMVRG\n14KnD+SdA9YGqPoREIs/2htMWtDwAib/akT8bfaa8AKofx6IHJ21RNdCza+h9Pvxfngw+Z+Ghpmt\nbCJ5UHBjem9c6TZUIHo4qYmEgP8U50HcHlD7CC3tAXb7FzIxsKvB26/tvob/o+3ow4LocoxdjXhK\nnE3518aPf9ERCU8xFHweCWgZlVxFBaI3EtsL6TpLiUDjjd4a+0iSc3xg1zSdJyJQ8BlM/rXx6U7Q\ntRUSpWtQI2VvRII404oEeAbR9ncjAMHE0wsA8iYC3gQ7fOAd3PbyIognX8WhB5AVgYiErWxc9pgm\nHRds8fYFXzltv/6AY4gsvvvojS1FUPBZKLgheYP514MU0FJY8qDwS4gkEg6lp5C1EcSurfuydelj\njk7FaRR/G7xDndGE5AM+CF4AgWlIYDLS9/fQbybS7ymk4Np2f+3F2w/6/BoC5wKNS6oC1lbHv0Lp\nsbhmgxDnp2IxsNsYc1V7xwa9zmV3bd3HcScMdKsLvZp0M2GLty+mz8OON6N9AHyjEW/L5UaRxL8f\nJnYIIh+AiUDeGYjveMCCyEKOGivDEJoNdiWU3N25N6VkHTeNlF/HKdqbxJLVkvKSMjZVH1KRyCLO\n6kY5kHp8hwm9D7W/ib+yof45TPDy+M7Wo4UIRJZgrErEN8iNLivdjCtTDBEZDlwJPJ7OeeUlztKc\nTjfcw42cEcbagwl/iLFaejgauw5qfwtE448YEIHwGxBdDSSwLYkf7I8z7pOSHdyyQfwauJt2FtOb\nF+89dOhg03YVCffINH+lMVFM9X/DkW84QnDkbsyRH2LsBueAyFLHU7LNiWGcrz7Rvih4hnSqP0r2\nyVggROQqYJ8xZkl7xzUv3ltW1tLZRkXCPTISifqZEFkCRJ2QcCJOwFbdox2f6zveGS20wA95ExFf\n26VOpWfgxgjiHOBqEdkO/A24WET+mm4jKhLu0WmRCL+BM3VojgXh9zEmBnmTHI/KNgQgeBmU/hR8\nY51NEoTg5c5qidJjydhIaYy5B7gHQEQuBL5tjPl8Z9pSw6V7dCb7VMK8EUBjvIZ4CjH5n4WGZ5vt\n8zni4DvZMXr2+RnGmLScoIwdgvDbEFkM3r4QnIH4Tkz5fKXryDlPSh1JuEfa2af8pwEJbmzfSETy\nMHXPOpGd2PGHOL4PwRlQ8yDm4Ocwh26D+r+l7P9g7Aao+jbUPQXR5RB6F478ABN6N72+K12CqwJh\njHm3Ix+IVFCRyBIFt4IUAo22BJ8zVSj6KsbaHQ/Kah7gFYPwPDhyl+MDYUJgV0HDS1Dzy9SuGZoN\nsf3N2jXO87pH1ckqB8jZYC2dbrhHqtMM8Q3G9H0EQq9BdAP4RkJwOuIdgGl4ieYZqI7SuNzZfF8E\nIssw1seIb2j7F40spK3dA0Ag/CEmuhysTY7XZ8FnEJ8m2u1OclYgQEXCDdK1RYinBAquT7DHR8Lp\nB5BwdVt8ENsBHQmEFCXebiyo/R2Ob4UNsQqILMUUfRMJanh4d5FzNojW6HQjc1yp75mX7Kb0kPB3\nxkQTRnK2IX9GgpR4guNTEaGl+FhQ+yDGUser7iLnBQJUJNwgU5EQbxkUfQ3wxwO8gs7z/GQLVjHH\nsaqjdvPOiCeS8TtBYxKMC0s7OTCbXL2VrianpxjN0elG5qQb0NUaCZ6PyTvdWY7EgO9kqP01iR1o\nDdT/AxOcgXjy22+34LNOPEd0I3hKwTcajnwlbrxMgLUJYyKI5HX6vSip0SNGEI00H0k0PpTuRTzF\nSPAiJHgx1P8VrG0k9bAXL9i7U2y3xAkz95c7PhTBT7VztIfk9hAwdvVR93AlI3rMCKKRRpEAdETR\nSdJynkqCMVGILCJhgFbTQRZI385dIDjdcZ6ytrTa4QH/hMTJc6MbnFybsUrntX8iFN9xNCemkjY9\nagTRGrVNpI8rBktwbv727AT4wD/eSSaTrAljMKG5mCPfwRz+Gqb2Lxi7GoiHopfcC95RQJ7TnuSD\nd0DcFtKqrdh+qP4viO3GES0Loovh8DcxsZoM3mjvpseNIFqjton0ydQWASCefIxvGFhJit7knQFF\n/95+I3VPQOgNmpLMxGZD5ANMn18jnkLnGn1+AdE1zpKpdzD4T0+cyCb0Wly0WmEOw5GvYfo87KTa\nU9KiR48gGtGRRJYo/Fp8NaPxd8bv+DX0eQgp+W67xkkTO+x4UbZIl285WbBDbzRtEREkbzySfyWS\nd0bSLFdHRw6JLlYHDX9P440pjRwTAgEqEp0h02mG+Muhz8OQ/0nImwIF/wJ9f4f4RnZ8srUlQXg4\nQASiK9LvjO9kjrqIt8bEV16UdDlmBAJUJNLBLVuEeAcghf+KlNyDFFwL+DDWxx3HUXj7kXj1wwPe\nTkwVg5fEk+8m62hh+m0qx5ZAgIpEOrhmsCSejar293DoFic689AtmPoXkxf99Y4E7xDaZqHyQfDK\ntK8vnkLo8yvwJFqdCUAw4xjCXskxJxCgIpEOrolE3ZMQmgtYTlSnCUHDcxCe66xWWDswkdVN/gki\nAsU/Bt9JNEWNSjEU3xXPkp0+4u3riISvHAjERxR+CF7kjDCUtJFUyrq7zanjJ5gXnnu1y6+zqdr5\np9fVjY5pXNXojH+EMVE4+K+0DAWP4xkCHj9YlU2Vvyn8PJJ/9BfdxA47hkTv0ORGyHT7ZO1w0vl7\nRzlu4r2MsuApS4wxkzNt55gcQTSiI4nUSSW5zOGGBlbu3cu+2tqWO0wDSb0p7b1gVQBhMPU4uR6e\nwURWNR0i3r6Ib7hr4gAgvuOdVY9eKA5u0uP9IDpC/SQyx7YNjyz6kPd2bCfP4yFq20wYNJi7zzmP\ngM/nTA08xWAfTtZCq9dhCM2CvFO7uutKhhzTI4hGdCSRGS+uX8v8nduJxmLURaNEYjFWVO7lsSXO\n0qFTtft2HI/HRgTHL6J1KHecZBXBlZyiVwgEqEikSiJj5ayNGwhZLbNZR2Ix3t2xjZjt2LAkeA6U\n/AD848EzAPKmQulPIKGNyw95Z3ZF9xWXOeanGM3pSdON+Tu28/Sq5eyrrWVgURE3nzaRc0aMTPn8\ndDNLQ/LsU3XRBMZHIGbbWHYMr8f5N5K8U9tMG0zhzU5C2iaPST94yyB4RVp9U7JDxgIhIscBTwGD\ncKJ3HjXGPJxpu11FTxCJedu385tFC4jEnF/tvbW1/HrhAmwD5x0/st1zl+/dw2NLF1FRXU2R38+n\nxo7junHjUxaLRHEa4wcOYtmeCqYM2MPZA3fTEPMx5+PjaWCUY4NoB8m/AuM7HhpmOTaKvCkQvKLD\nHBFKbuDGCMIC7jLGLBWRYmCJiLxpjFnrQttdQq6LxFMrlzWJQyORWIynVy5vVyA2HNjPT+e923Ru\nbTTK39asYvOhg9z1iXPJ6+BmTsbtEyZSOXgmJ/fZR743RszAhUN2csSTWvCT+MeBf1ynrq1kl4xt\nEMaYPcaYpfHnNTgVvodl2m5Xk8vJZ/bV1yXcXllXm3B7I8+uXtlGWCzb5sPdFfzrizNZtjf1XI7N\nbRHD8jczsd8h8r1O216BoDfGYJmFiamx8VjGVSOliIwETgcWJtiXsHhvNikvKWt6QG4YMOfv2J50\nX//8gnbP3VVVlXRfKGZx/7y51EWSVc86ShvvyuiHeEh0nheiKztsT+m5uCYQIlIEPA98wxhT3Xp/\ne8V7c4FcEIkdR47w8EcLEu7zezx8/rQJgGOAXHdgH/9Ys5o3t2ymLuIYEY8v7dNu+wIsqNiVUl9a\nikQ+CVO8icTDvZVjFVdWMcTJ//U88Iwx5gU32swG2bZNzN68gWgsUXFcuPqksVw06kRits3P5r3H\n6v2VRCyLPK+PPy1bzL0XXsKNp57Gqv2VbaYZjcSMTUO0nRRxrWha1Wg4i9HyFm1dqQXyTk+5PaXn\nkfEIQhzz+J+AdcaYhzLvUnbpzpHE3toaXly/hhfXrWFPTTWHGhoSJnHL9/kY3c8Zdb29bSur9u0l\nZFnYOFOHBsvi/vnvMbqsH/9x/kUMKUpSjAZh0pAhafUx4BnNor02f9s2iYjtIWT7sckHKYCSHybM\nDakcO7gxgjgH+FdglYgsj2/7vjGm66Oxuoj2RhKHG+qZs20rB+vrOW3QYM4cNhyvJ32dfWXDep5c\nsbQpHPqZVSuZPHQoAa+XcKsRQNS2Obn/AADe3Lq5zX6AeivK9iOHGT9oMH+48hp+ueB9Fn1cQchy\nRgwBr4/pJ45mWElpWv18dvVKPvp4LZHYUGbtmMFpZfswBLh1yq0M9msKt2OdjAXCGDOf9nKQ91AS\nicTqyr3cN/ddYsYmatu8vX0rw4tLuH/aZWktIe6rreXJFUuJ2s1iFEyMxbt307+wgAP1DURtRwQC\nXi9XlY+hb34BMdtm+5Fk8Q40iY2IcNcnzmHxx7t5b8c2vB4P00aeyGmDU6h01YyGaJQX1q1lYJHT\nl5poHu9XDscrQuHa9dx5lpbAO9bpVZ6U6dJcJIaPGsCDC+YTih2dw4csi51VVczatIFrTz4l5XY/\nrNiVcCphY7hg5CgCXh/v79xBYV4eV5aP4cxhwzlYX8ddb8xOOHoA8Hu8jOp71PtRRJgybDhThg1P\nuV+t2V1Tjc8j7K7ux7CSoytPMWNYf/BAp9tVeg4qEB3QKBKLVm5tGq43J2LHeG/HtrQEoj38Hi/X\nnnxKm/Z++cH7HA6Fkp534chRabtWd0S/goKmUU5zkRBgaFGxq9dScpNeE6yVCeUlZXg9HjyHEudZ\n9KWZx2Dq8OMSzsm84uETw49rs70mFGJDB7/YR0IhGqId5IFMk77BfM4cOgy/x0kLt7vaMZT6vF4+\nM84dQVRyGx1BpMjZg4fTJ5CPdbiWSN+jH1vA62X66JPSamtgURG3TpzEE8uXNrMbePjcqaclNCJG\n7BgitFun5sOKXWw7fIiHLp/RYXxEOnxz6jk8tuR9PNG5TO6/h1qrkH5lZ+HztM4l6T7GrnXS4HsH\nIKL/qtlAP/UUERHuPfcivv3u6+TV2IRLPc48f+hwpo06Ie32rjppLFOGDueDih1gnFHFkOLEJeLK\n8gvoV1DA3taZnJoRtWPsr69jztbNzDhpbNr9SYbfE+X/nfQ8JrYPIYwz6NxJKGIBl7p2neYYu8Ep\noRdZBOIDvJjC25x6oEq3ogKRBseVlvLXq67j5W0bqA6FmTrxREb16fxS36CiIj49tuOhuojwzann\n8B/vzsGybSw7cXq3cCzGwo8rXBUIQq9DrBJpcpKygQg0vIAxF3aNH0TtwxBZipMAN273qX0U4xng\nhJQr3YbaINLE7/XwmdEnc+6IEfiS2CS6grH9B/D7GZ/kunGncPrgIfgS+F4IUBZ0OYw6soCEyWgR\nNu9flWB7ZphY1VFxaNkRaHje9esp7aMjiE7SGbfsqGWxvHIvUTvGaQMHUxRIko4tCf0KCrlx/ASM\nMXzlny9RWVvbwiyR5/Uyo3xM02tjDG9v28LszZuI2jHOGzGSq04aSzAdG4UkDhAL2kJIAq5UCm+B\nOexU3EpUZ9Pe7951lJRQgciAdERizb5KfjL3naYb2rIN/zZpCpeOHp32dUWE/7pwGve+9zYH6hsQ\nAdsYbp94BuX9+jcd9/DCD/hg184m34nd1SuZv3M7D156BQcb6nll/Xq2VR2mvF8/Plk+lv6FCapP\nBa8Eax2Y5tGcHvD2J+g/j7C9Oe3+t4t3KIkzZHuddHZKt6JTjAxJJXYjZFncO/cd6i0nbqLBsoja\nMR5dtohdVS3zKexYW8FbT89l4awlhOuT+z0MLirm15dfyakDBxKNxRDgLyuW8vL6dQDsrq7i/Wbi\nAI7L9p7aWl5cv5avv/ZPZm/ZyJr9+5i1YQN3zH6lTV8AJDAZgtfgJKAtcIrRePpD8Q9d97sAEMmD\ngs+1SnYrzuv861y/ntI+OoJwgY5GEot3VyQ8z4rFeHvbVm6ZOAk7FuNP33+WNe+vx47F8Pl9PPeL\nl/n333+J48cl9ob8nyUfsaKykpgxxOJC8NdVy+lXUEB9NJrQ1yJkWby0YV0Lpy/L2FiWzePLlvBf\nF05rc44U3ogJXgHWevCUgG9sixoWbk8zJP+TGM9AaHjBSVPnPxXyr0e8A1y7hpIaOoJwifZGEg2W\nldCHwQbq485NH81extoP1hMNRYlFbcL1EUK1IR799pMJ61uGLIv3dmxvitloJByL8Y+1q+kTDCb8\nhfcCtZHESWhX76tM+v7E2wcJTEX841qIg5v1PVtcL3AW0ucBpOxRpPhOxDfI1faV1FCB6ABjTPIC\ntK1IJhITBw/GstvGUAS8XqbGPSc/eHERkYa2qyINtSEqNrZNFVcbDicd4h8ONXD64CEJjZFejyfh\nCghAvq9zS5ZdJRJK9tEpRhJCdWGe/9UsPpq9jJgVo/yME7jhe59m0Ij+7Z7XfLrRyJDj+1EUCHCk\nVSxFvt/PxMFOfoZYEt8GBIx9VKD27TzAtlU7KO5XTMDrTZgcZmz//vi8Xn528aX8bN577KuvwyNC\nwOvjW584hwW7djJn25YW0aTOCkjH5feSkSxlfioYYwNRJFmRHSVrqEAkwBjDb+/4E7s2VGBFnBtw\n46ItPHjrI/zXC3dT2Kf93JCNIwlwCgjPXrg6YaBXQzTK1sOHOLGsH1OvPIPdm/YQDbUcRfgDfoaf\nNARj2zx97z9YMmcloeOLiQW9FJYGCZ3Vr+lGFyDg8/H5UycCMKyklN9deTUf11QTicUYUVKKx+Nh\nXP8BHKivY0VlJX6PELVtzhw6nOvHZeaElChlfnsYE4W6pyH0BmBhvIOg8EtI3sSM+qG4hwpEAnau\nreDjzXuaxAEc0bDCFh+8vIhLb74g5bbKS8p4fu1aYvtD0Lflx20bWH9gPyeW9ePsT01m2dur2LZ6\nJ5H6CL6AD4/Hwxfvv4lDoRCzX1vIvK3b2H/baIxHHDXweCjbVc+QCSPYV1/L2P4DuXH8qW3iOYa2\ncuHO8/n40QUXs6emhj011RxXWsqAwmRZqLqQ2j9C+H2aHLFie6D655g+P0F86S//Ku6jApGAvdv3\nOwlZWxEJR9m1IfXU8Y2cVFrGwt274LBFtJlIeD1CvwJnNOL1+bjzkS+w/qPNbFyylZJ+RUy69DSe\n3LSauf9cSCxsYV8RrybQrG+HBvi5ZfAILhyfvnv1kOJihhRnJ2zb2NUQnkdCj8n656Hku9noltIK\nNVImYPCogQlrSuYF/Bw3Nv2SHxePOoE849zU/sNHb4igz8cZQ462Jx4PJ089iWu+Np2LbjiXd/dX\nMH/XDqK2je33xLNItxKuPC9zKrY3vYxaFnO3b+O51atYtLsCO5lto4sIestTM1baBx2PyUTEEi8L\nK92PjiASMOLkYQwfM5QdayuwIs4NLR7BH/Rz9tWTAThQcYj/e2Q2GxZtJlgU5OIbz+GC68/B42k7\n8ugTDHLvhdN4cMF8DkVD+KsMA4/vy3fPOR+/N3nY9KxNG5JmkGqO7Xd0vrK2lrvfeo2QZRG2LAI+\nH4MKi7h/2mUU5uV10Ip7OCKxqX1jpWdwYndqBHydN5Yq7qICkQAR4Y7f3M4LD7/KR68uxYrEGHvm\naK7/7jUUlhZQdaCGn9/8G0K1IWzbUFdVz0uPvM7ebfu5+quX8/IfX2fZW6vw+rx84urJTL/9Ysb0\nH8BjV32KvbW17Kqvpm9+fhvbQGvqU0gA40c4P16O7+EPP6AqFGpyuQhZFrurq/jfVSv40hlTMvxU\n3EU8+ZjgDAi9Bs2L8kgA8q/NWr+UlrhVF2M68DCOH87jxpifu9FuNgkUBLjxnk9z4z2fbrPvnWfn\nE2mIYDdbfoyEIix4ZTFr3l9P1YEaYpbzyz/nmblsXr6db/7PlzlceYSNc9fj9XmoPXNYhzEckwYP\nZd7O7W19rAwgEPB4GVXWl4tHnkDIslh/cH+bYy1jmLtze84JBACFN4O3PzS85CSG8Z8Ehbcivs7n\n0VTcxY3q3l7gdzjZQyqARSLyci4X782ULSu2Y0XbDv09IlQfrm0SB4Bo2GLXugqee/Al3ly+loZR\nxXhDNkWPH+Hyb1wOkFQkbp4wkWV7PyZkWURtG0/8GsNKSykOBJh+wmg+cdwIfF4vsQTLqE2k5ufV\nLsaYtGMvOvKJEBHIv9J5KDmJGyOIM4HNxpitACLyN+AaIOcFovZIHdtX76K4byEjxg1P+QYYdPwA\ntq3aiR1raQC0rFibbQCWHeN5ey/hy4djAh6wDFUT+/LyM+9y/LjhSUcSAwqL+N2Mq3l10wZWVO5l\n2+HDGAy7qo6Q5/Px91CISUOH4vN6Cfp8jO03gLUH9rXQA59IuxXB28MYw+zNG/j76tUcCYcYWFjI\nbRNO5+wRHbeXieOUkju4sYoxDGhe8LGCBNW9c6147z8ff4vvz/gZf/7Bs/z6q49x73W/4NDe5DUn\nmjPtpvPw+VsaF8UjCcUBoK68hPDQAkccAHyC8Xs4MG0oVYt3A8mjQUuDQW48dQJBn49wzCIcizkV\ntSyLPTU1PLliWdOxX596NqXBYJOLddDnY2hJKTedOiGl99WaVzas54nlyzgSdjxA99XV8auFC1hU\nkdoqg7pg93y6bZkzl4r3rp6/jreeeA8rYhGqCxGuD7N/10H+8I0nUjp/yAmD+OqvbqXfsDK8fi8e\nryeR2wQAHq+H+pP7YvISZIAysMOq7zBkPBqLsWLvngT2BZt5O3Y0vR5UVMRjV32Kr04+i5vGT+Db\nU8/l4ctndGoFwxjD39esbLOKEonFeHrV8iRntUVFomfjhkDsBprnah8e35azvPO39wmHWkY02rZh\nf8VBx0kHCtU2AAATE0lEQVQqBcZMGc29/3c3P5/9Q/wBH3Ys8US/z4AShh6fPEz5pFOPBzKpCdry\nunk+HxeOHMX1409lyvDheDpRFhCcEUpDErtGZTvJcxOhItFzcUMgFgHlIjJKRPKAG4CXXWi3y6iv\nqk+43eP1UF/TkHI7IkJBaX7CKMxGjuyrovblDXistgISCPiZUj6q6XUykfB7vYwfNLjNl+UV4ezj\njk+5v+kQ9PnI9yd2ZBpSnL5bdqNIKD2LjAXCGGMBdwCvA+uA54wxazJttyuZcPGp+ANt7bMGOO6k\n9KpfiwgjTh6adL9tG7wbj1C08hA+BJ8NflvI9/q495JL8bZyrEomEv8+ZSolrewLgwoLuXXC6Wn1\nN1VEhJvGn0aglSNXntfLzad1zTWV3ENSzXXgJqeOn2BeeC57xb8bakM8cPNvOVJZRSQcdbwk83zc\n+P1rOWvGpLTb2756Fw9/9VGiESupodLn93LB1y6haOpxFOXlMXnosHYL3GyqdobjzVc3IpbFBxU7\n+bimmlF9ypgydBi+djwx3WDO1s3876qVHGqoZ2hxCbdOnNTpep+NkZ66qtH1lAVPWWKMmZxpO71S\nIADC9WE+eHkRq+evp6R/CRdef3bS1G6pULl9P28+/R5rPthI9cHqFjkcwAnbvvbrV3LB9alXxE4k\nEj0dFYnuQQUiizTUhqg+UEPfwX3IC7acpx/YfYj7rn+IaLhtXod7X/oupf3Ti55UkVA6g1sCobEY\nSYjFbNYt2EDljgMMOXEwY88cjbFtnnvwZRbMWozX68XYhktvvYAZX5jW5GTVf1gZ13/nap578KWm\nFQTbtrnpR59JWxzgqE3irX8uY97MBRz4+BCDh/bhk1+5nLFn9UzDnzpR9RxUIBJQfaiWX97+e6oP\n12JFLHx+H/2HlTH69FEs/OcSrLCFFc9j8NYT79GnfynnfOporMOU6acTs2JsWLSFfkPLuPTm8ynu\n2/mELOsXbmLWt/5OJD4q2V4b4o/feoIv3H8Tp54/LrM3myXSzT6lZAcViAQ8e/+LHNp7pCmmIhaN\nsXf7PvZurSTWyggZDkV4/S/vNAlE5fb9/PJLfyAatrDCUXwBP9tW7eDOR77YZjqSKjN/NatJHAAC\nuxsID8tn5kOv9FiBUHoGmjCmFbZtWD13XYuAK3BEorU4NFJz+Kjj0J9/+Cx1R+oJ14eJxWzC9WF2\nrqvgrb++1+k+VW5r67wV2N3Agf01mG5OCOM26jyV26hAtMIYg0kW/pjEnbqor5M2rvpgDXu2VrZJ\nkx8NWyx4ZUnSax7ZV8XuzXvbiFIjxf0ST0/KaoWK7QeStpvrqIdl7qMC0Qqv18OYKSe2yQzl9Xo5\nccLIhOdUH6hh45KtibLUHcVuu7PmcC0P3PJbfnT1A/zitt9x96X3sui1ZW2Om377RQSCLeMpAsE8\nLr/tIspLyjrhnp07qIdlbqMCkYDPff8zFPYpJJDv3JSBggClA4qZdtN5Ce0IVsRi/osLKe1fzMAR\n/dsEbvkDPs68sqUDVn1NAz++5r/ZsaaCmBUj3BChoSbEX++byfbVu1oce95npnLFly8hWBjAH/AR\nKAhwya0XMO2m8wDSEomYbfPG5k18+43Z3PX6q7y6cT3RFNLaKb2TXm+kjFkx5s5cwPsvfkTMsjlz\nxulcfNP53PvSd1nyxgr2bt/HsPKhTJo2ng2LtuDxttVUYyBU64RE3/aTG/nVl/9ILOrc9IGCAANH\n9OOECSNZ8/4GTpw4kmBhgP/5zlOE68Mt2rFK8zhyehn3LXiPi2LjufKkMfTNz0dEuOzmC5j2uXOp\nPVJPUZ8CvL6WHpTlJWVs6iBDlTGGn8+fy4rKPU1Rmruqq/igYhf3XXRJlxTjTRVd8sxNerWjlDGG\n33/jCTYt2UIkXrDGH/Ax5IRBfOcvd+D1tRSDhtoQ91z+kxYrCgCB/DxuuOdazprhxCiE6sIseXMl\nh/ceobBPPq//5Z2m9mNWjJOnnsTKuWtbBGJGBuWz//oTMF4Bn+D3eMnzevnFZVcwLI3U9JuqDyUV\niQ0H9vOjd+YQjrWM0gz6fHzv3PM5fXDymJKuRp2n3MUtR6lePcXYsaaCzUu3Nt284BgUK3ccYPX7\n69scn18U5LN3X0NewN80kgjkBxgxbjiTLzut6bhgYYBzPjWF6V+4iFcff5vqg7WE6sKE6sJEwxYr\n31vbJg3c4UuHOQllfM6veNSOUR+N8JdlyY2biWhvurF2/76ENUJDlsXafdm1Y6jBMjfp1VOMrat2\nEEsw/w7Xh9m8bBsTLmjrY3DONVMYecpw3n9xEXVVdUy4cDwTLjylzWgDYP3CzcSi7eSKjGO8QnRg\nsO12YHnlntTeTDOSTTdKg0H8CfJX5nm99Am2vX53ox6WuUevFojSAaV4/b4WJfbAKZDTd3BpkrNg\n2OghXP+dqztsv6E2lFq+WNsgNpgE47lEFbpTIZFIfGL4CB5bsrjNsR4Rzk8hz2R3oCKRW/TqKcZp\n543F7/e1WXXw+DycNT39sO/WnDT5RGIJsl+3pqAwSLkVxC8tv448j5crRp/U6eu3nm7k+/3cd/El\n9C8oIOjzEfT56BsM8p8XXExxDowgGtGlz9yhV48g/AE/33r8qzz23ac5UHEQEaG4rIgv/OymDit4\np0Jp/2Km334RbzzxHpFWKe4aCeTncdMPr+PkC8by03nvsv7gAXziwbJtpgwdxr9kWHG79UhidFk/\nHv/kp9lZVYWNYWRpn6yuXii5Ta9exWjOwT2HsWM2/YeVuX7DbFy8lXkvLOTw3iPs2lCBx+slZsUQ\nESZfNoHP//i6pmvuqqpiT00NI/qUMrjIvcK67a1u5CKhWAel+5R20XwQPZRwfZjl766lrqqOMVNO\nZNjo9FLcZYKKRO9B80H0UAIFgSZ/ie4mFWeqXCKlIsBKl9KrjZS9kZ4eu6F0LxkJhIg8KCLrRWSl\niLwoIn3c6lg2qT1Sx+LXV7D8ndWEQx1X2O5pqEgoqZLpFONN4B5jjCUiDwD3AN/NvFvZY97zHzLz\noVfw+LwIjrPSV35xM2OmjM5211ylcbrRnFydeqhPRPbISCCMMW80e/khcF1m3ckuH2+p5PmHZhEN\nWxA+6m34x7ue4uev/YBAQSDja1QdqGHmQ6+w6r21iM/DxAvGMWLccPx5fk49f1yn8lZ2lsZ8l+AY\nMJMVEc4m6jiVXdy0QdwOzE62M9eK9yZi4T+XJk7aIrB6ftvYjHSJhKI8cMtvWT5nFZFwlHBdmIWv\nLmPmL2cx86FX+PE1P2feCwszvk5n6Hzpv65H4zSyR4cCISJvicjqBI9rmh3zA8ACnknWTi4V701G\nuCGcOK2cbQg3JHZ0Soclb66goSbU5hrGGCKhKNGwxcxfvsyB3dm5EVQklNZ0OMUwxlzS3n4RuRW4\nCphmsuFU4SITLzyFhbOWEm5omafBtm1Ontp5l+dGKjbuaZMDojW2bVj61iouu+WCtNpe9NoyXvvL\nO1QfqOWE00Zw9demM2z04LT7WF5SlvPTDaX7yMgGISLTgbuBC4wxiSvi9iDGnDma8eeOYfX89YQb\nIk0l+a744jT6DkoevJUqQ08YRCA/r/3RiG2S5qYEOFxZxew/vc26hRspKSvm0pvPZ9+ug7z66FtN\n7tyr569j45KtfPepOxk8Mnll8WTkskgo3UtGnpQishkIAI1GhQ+NMV/p6Lxc9qQ0xrD2g40seXMl\neUEfU6+azMjxx7nSdrg+zI+veYC6qnrsBDkqwYkk/c6TdyT89a86UMNP/uVXhGpDTWHqeUE/sZjd\nJijM4xEmXTqB2396Y6f7m4tVvTSxTGrkhCelMebYWvvDqWp9yjljOOWcMa63HSgI8J0n7uDZ+19g\nw6ItGGPiMRgGDPj8Pi763LlJpwZvPf0uofpQixwWkSR+GrZt2LZqZ0b9zcWRhK5qdC/qat3N9B9W\nxp2PfJFYzEZE2LNlL4vfXImxbc64ZALHjU2e9m39R1tSCh9vfq1MUZHo3ahAZAlvPGXdsPIhDCtP\nLWCrbHAfdm9qm2HK4xG8fq/jvxEnL+hn+hcudqWvuSwSSteisRg9iEtvvqBN2n2f38voSSdw1pVn\n4A/48AV8lPQr4vM//ixjJp/o2rVzeQlU6To03LuHsfDVpfzjwZcdw6QVY8yZo7ntvhsoKM4nEooS\nqgtR1LeoTeEft8glw6UaLJOj+SB6MNFwlOqDtZT0K8IfSL+gb8yKsW/XQQpLCygp63zV8M6iIpH7\n5MQqhpIexhhe+Z83eeeZeU3bLr7pPK76t0vTymLl9XkZMip7N2cu2STUYNm1qA2iG5nzzDze/us8\nwg2Rpsfbf53HnGaC0VPIJZuEumF3HSoQ3cgbT77bJnltOBThzafezU6HMiQXRUJxFxWIbqTuSGJv\n9Nok23sCuSQSivuoQHQjg5PYDYbkgLEvE3JJJHSa4S4qEN3Idd/6JHmtVi3yAn6u++Yns9Qj92gu\nEo2P7kZtEe6jAtGNnDy1nDt/90XGTBlNaf8Sxpw5mjt//yXGnnVszJ/LS8qaHpCdEYWKhLuoH4TS\nZWTTX6K3+0e45QehIwily8iFkYSSGSoQSpeSSwZMJX1UIJQuR0Wi56ICoXQL2RAJp3SfGiszQQVC\n6TZUJHoeKhBKt6LTjZ6FCoTS7ahI9BxcEQgRuUtEjIj0d6M95dinO0VCpxmdJ2OBEJHjgMuAzFIo\nK72O7h5JqEikjxsjiF/hFM/p0VW1lOzQXSKhLtidIyOBiNfn3G2MWZHCsTlfvFfJDioSuUumxXu/\nD/w4lQv1hOK9SvZQkchNOhQIY8wlxpjxrR/AVmAUsEJEtgPDgaUikn7FWEWh+0VC6ZhOTzGMMauM\nMQONMSONMSOBCmCSMWava71Teh26BJpbqB+EknN0l0joNKNjXBOI+EjigFvtKb2brhYJtUWkho4g\nlJylu0RCSY4WzlFymuZFehrJdrGe3oSOIJScp6tzXeo0IzkqEEqPwm2RUFtE+6hAKD0OFYnuQwVC\n6ZGoSHQPKhBKj6WrREI5igqE0qNRz8uuRQVC6fGoSHQdWamsJSI1wIZuv3By+gO55AWaa/2B3OuT\n9qd9xhhjijNtJFuOUhvcKAvmFiKyWPvTPrnWJ+1P+4jIYjfa0SmGoihJUYFQFCUp2RKIR7N03WRo\nfzom1/qk/WkfV/qTFSOloig9A51iKIqSFBUIRVGS0i0CISL/KSK7RWR5/DEjyXHTRWSDiGwWke91\nYX8eFJH1IrJSRF4UkT5JjtsuIqvifXZl2ahV++2+X3H4TXz/ShGZ5HYfml3rOBF5R0TWisgaEfl6\ngmMuFJGqZt9jShnNM+xXu99BN39GY5q99+UiUi0i32h1TJd+RiLyZxHZJyKrm20rE5E3RWRT/G/f\nJOemf38ZY7r8Afwn8O0OjvECW4ATgDxgBTCui/pzGeCLP38AeCDJcduB/l3Uhw7fLzADmA0IMBVY\n2IXf0RCcpMMAxcDGBP25EJjVHf8zqX4H3fkZJfj+9gLHd+dnBJwPTAJWN9v238D34s+/l+j/ubP3\nVy5NMc4ENhtjthpjIsDfgGu64kLGmDeMMVb85Yc4Kfu7m1Te7zXAU8bhQ6CPiAzpis4YY/YYY5bG\nn9cA64BhXXEtl+m2z6gV04Atxpgd3XCtJowxc4HWIafXAE/Gnz8JfCrBqZ26v7pTIO6MDwH/nGQI\nNAzY1ex1Bd3zD3o7zi9QIgzwlogsEZEvu3zdVN5vVj4TERkJnA4sTLD77Pj3OFtETunqvtDxd5Ct\n/5sbgGeT7Ovuz2iQMWZP/PleYFCCYzr1Obnmai0ibwGJiub8APgDcB/Ol30f8EucG7PLaK8/xpiX\n4sf8ALCAZ5I0c64xZreIDATeFJH1cQU/ZhGRIuB54BvGmOpWu5cCI4wxtXE70v8BXR0jnXPfgYjk\nAVcD9yTYnY3PqAljjBER13wXXBMIY8wlqRwnIo8BsxLs2g0c1+z18Pi2LumPiNwKXAVMM/FJWoI2\ndsf/7hORF3GGaW79c6byfl39TDpCRPw44vCMMeaF1vubC4Yx5lUR+b2I9DddWO4ghe+gWz+jOFcA\nS40xla13ZOMzAipFZIgxZk98epUorLVTn1N3rWI0nxN+Glid4LBFQLmIjIor9A3Ay13Un+k4Fcmv\nNsbUJzmmUESKG5/jGDYT9buzpPJ+XwZujlvqpwJVzYaSriIiAvwJWGeMeSjJMYPjxyEiZ+L8/3RZ\nJeYUv4Nu+4yacSNJphfd/RnFeRm4Jf78FuClBMd07v7qJovv08AqYGW8U0Pi24cCrzY7bgaO9XwL\nzlSgq/qzGWc+tjz++GPr/uBYe1fEH2u6oj+J3i/wFeAr8ecC/C6+fxUwuQs/k3NxpoArm30uM1r1\n5474Z7ECx7h7dhf/3yT8DrL1GcWvV4hzw5c229ZtnxGOMO0Bojh2hC8A/YA5wCbgLaCs9f9zsv+3\njh7qaq0oSlJyaZlTUZQcQwVCUZSkqEAoipIUFQhFUZKiAqEoSlJUIBRFSYoKhKIoSfn/vpOh6gFX\nBmQAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10c3ae4e0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_train, y_train = create_toy_data(add_class=True)\n",
    "x1, x2 = np.meshgrid(np.linspace(-5, 10, 100), np.linspace(-5, 10, 100))\n",
    "x = np.array([x1, x2]).reshape(2, -1).T\n",
    "\n",
    "feature = PolynomialFeatures(1)\n",
    "X_train = feature.transform(x_train)\n",
    "X = feature.transform(x)\n",
    "\n",
    "model = SoftmaxRegressor()\n",
    "model.fit(X_train, y_train, max_iter=1000, learning_rate=0.01)\n",
    "y = model.classify(X)\n",
    "\n",
    "plt.scatter(x_train[:, 0], x_train[:, 1], c=y_train)\n",
    "plt.contourf(x1, x2, y.reshape(100, 100), alpha=0.2, levels=np.array([0., 0.5, 1.5, 2.]))\n",
    "plt.xlim(-5, 10)\n",
    "plt.ylim(-5, 10)\n",
    "plt.gca().set_aspect('equal', adjustable='box')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.5 Bayesian Logistic Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x115996240>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_train, y_train = create_toy_data()\n",
    "x1_test, x2_test = np.meshgrid(np.linspace(-5, 5, 100), np.linspace(-5, 5, 100))\n",
    "x_test = np.array([x1_test, x2_test]).reshape(2, -1).T\n",
    "\n",
    "feature = PolynomialFeatures(degree=1)\n",
    "X_train = feature.transform(x_train)\n",
    "X_test = feature.transform(x_test)\n",
    "\n",
    "model = BayesianLogisticRegressor(alpha=1.)\n",
    "model.fit(X_train, y_train, max_iter=1000)\n",
    "y = model.proba(X_test)\n",
    "\n",
    "plt.scatter(x_train[:, 0], x_train[:, 1], c=y_train)\n",
    "plt.contourf(x1_test, x2_test, y.reshape(100, 100), np.linspace(0, 1, 5), alpha=0.2)\n",
    "plt.colorbar()\n",
    "plt.xlim(-5, 5)\n",
    "plt.ylim(-5, 5)\n",
    "plt.gca().set_aspect('equal', adjustable='box')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
